package utils

import (
	"embed"
	"fmt"
	"os"
	"path/filepath"
	"text/template"
)

// TplGenerateFromTemplate 根据嵌入式模板文件和参数生成文件
func TplGenerateFromTemplate(outputPath string, templateFS embed.FS, templateName string, data interface{}) error {
	// 确保输出目录存在
	err := os.MkdirAll(filepath.Dir(outputPath), os.ModePerm)
	if err != nil {
		return fmt.Errorf("创建输出目录失败: %v", err)
	}

	// 读取模板文件
	templateContent, err := templateFS.ReadFile(templateName)
	if err != nil {
		return fmt.Errorf("读取模板文件失败: %v", err)
	}

	// 解析模板
	tmpl, err := template.New(templateName).Funcs(template.FuncMap{
		"ToCamelCase":          StrToCamelCase,
		"ToUpCamelCase":        StrToUpCamelCase,
		"ConvertMySQLToJava":   StrConvertMySqlToJava,
		"ConvertMySqlToGo":     StrConvertMySqlToGo,
		"ConvertMySqlToTs":     StrConvertMySqlToTs,
		"ConvertMySQLToPython": StrConvertMySQLToPython,
	}).Parse(string(templateContent))
	if err != nil {
		return fmt.Errorf("解析模板失败: %v", err)
	}

	// 创建输出文件
	outputFile, err := os.Create(outputPath)
	if err != nil {
		return fmt.Errorf("创建输出文件失败: %v", err)
	}
	defer outputFile.Close()

	// 执行模板并写入输出文件
	err = tmpl.Execute(outputFile, data)
	if err != nil {
		return fmt.Errorf("执行模板失败: %v", err)
	}

	return nil
}
